using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Kitware.mummy.Runtime;

namespace Kitware.VTK;

/// <summary>
///    vtkQuadRotationalExtrusionFilter
/// </summary>
/// <remarks>
///    sweep polygonal data creating "skirt" from free edges and lines, and lines from vertices
///
/// vtkQuadRotationalExtrusionFilter is a modeling filter. It takes polygonal
/// data as input and generates polygonal data on output. The input dataset
/// is swept around the z-axis to create new polygonal primitives. These
/// primitives form a "skirt" or swept surface. For example, sweeping a
/// line results in a cylindrical shell, and sweeping a circle creates a
/// torus.
///
/// There are a number of control parameters for this filter. You can
/// control whether the sweep of a 2D object (i.e., polygon or triangle
/// strip) is capped with the generating geometry via the "Capping" instance
/// variable. Also, you can control the angle of rotation, and whether
/// translation along the z-axis is performed along with the rotation.
/// (Translation is useful for creating "springs".) You also can adjust
/// the radius of the generating geometry using the "DeltaRotation" instance
/// variable.
///
/// The skirt is generated by locating certain topological features. Free
/// edges (edges of polygons or triangle strips only used by one polygon or
/// triangle strips) generate surfaces. This is true also of lines or
/// polylines. Vertices generate lines.
///
/// This filter can be used to model axisymmetric objects like cylinders,
/// bottles, and wine glasses; or translational/rotational symmetric objects
/// like springs or corkscrews.
///
/// @warning
/// If the object sweeps 360 degrees, radius does not vary, and the object
/// does not translate, capping is not performed. This is because the cap
/// is unnecessary.
///
/// @warning
/// Some polygonal objects have no free edges (e.g., sphere). When swept,
/// this will result in two separate surfaces if capping is on, or no surface
/// if capping is off.
///
/// </remarks>
/// <seealso>
///
/// vtkLinearExtrusionFilter vtkRotationalExtrusionFilter
///
/// @par Thanks:
/// This class was initially developed by Daniel Aguilera, CEA/DIF
/// Ported and modified by Philippe Pebay, Kitware, 2011
/// </seealso>
public class vtkQuadRotationalExtrusionFilter : vtkMultiBlockDataSetAlgorithm
{
	/// <summary>
	/// Create object with capping on, angle of 360 degrees, resolution = 12, and
	/// no translation along z-axis.
	/// vector (0,0,1), and point (0,0,0).
	/// </summary>
	public enum RotationAxis
	{
		/// <summary>enum member</summary>
		USE_X,
		/// <summary>enum member</summary>
		USE_Y,
		/// <summary>enum member</summary>
		USE_Z
	}

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new const string MRFullTypeName = "Kitware.VTK.vtkQuadRotationalExtrusionFilter";

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new static readonly string MRClassNameKey;

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	static vtkQuadRotationalExtrusionFilter()
	{
		MRClassNameKey = "class vtkQuadRotationalExtrusionFilter";
		Methods.RegisterType(Assembly.GetExecutingAssembly(), MRClassNameKey, Type.GetType("Kitware.VTK.vtkQuadRotationalExtrusionFilter"));
	}

	/// <summary>
	/// Automatically generated constructor - called from generated code.
	/// DO NOT call directly.
	/// </summary>
	public vtkQuadRotationalExtrusionFilter(IntPtr rawCppThis, bool callDisposalMethod, bool strong)
		: base(rawCppThis, callDisposalMethod, strong)
	{
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkQuadRotationalExtrusionFilter_New(ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	/// Create object with capping on, angle of 360 degrees, resolution = 12, and
	/// no translation along z-axis.
	/// vector (0,0,1), and point (0,0,0).
	/// </summary>
	public new static vtkQuadRotationalExtrusionFilter New()
	{
		vtkQuadRotationalExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkQuadRotationalExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkQuadRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	/// <summary>
	/// Create object with capping on, angle of 360 degrees, resolution = 12, and
	/// no translation along z-axis.
	/// vector (0,0,1), and point (0,0,0).
	/// </summary>
	public vtkQuadRotationalExtrusionFilter()
		: base(IntPtr.Zero, callDisposalMethod: false, strong: false)
	{
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr rawCppThis = vtkQuadRotationalExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		SetCppThis(rawCppThis, callDisposalMethod: true, (mteStatus != 0 && rawRefCount >= 2) ? true : false);
	}

	/// <summary>
	/// Automatically generated protected Dispose method - called from
	/// public Dispose or the C# destructor. DO NOT call directly.
	/// </summary>
	protected override void Dispose(bool disposing)
	{
		base.Dispose(disposing);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_AddPerBlockAngle_01(HandleRef pThis, long blockId, double angle);

	/// <summary>
	/// Set/Get angles of rotation for each block in a composite data set.
	/// </summary>
	public void AddPerBlockAngle(long blockId, double angle)
	{
		vtkQuadRotationalExtrusionFilter_AddPerBlockAngle_01(GetCppThis(), blockId, angle);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_CappingOff_02(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOff()
	{
		vtkQuadRotationalExtrusionFilter_CappingOff_02(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_CappingOn_03(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOn()
	{
		vtkQuadRotationalExtrusionFilter_CappingOn_03(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetAxis_04(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public virtual int GetAxis()
	{
		return vtkQuadRotationalExtrusionFilter_GetAxis_04(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetAxisMaxValue_05(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public virtual int GetAxisMaxValue()
	{
		return vtkQuadRotationalExtrusionFilter_GetAxisMaxValue_05(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetAxisMinValue_06(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public virtual int GetAxisMinValue()
	{
		return vtkQuadRotationalExtrusionFilter_GetAxisMinValue_06(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetCapping_07(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual int GetCapping()
	{
		return vtkQuadRotationalExtrusionFilter_GetCapping_07(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkQuadRotationalExtrusionFilter_GetDefaultAngle_08(HandleRef pThis);

	/// <summary>
	/// Set/Get angle of rotation.
	/// </summary>
	public virtual double GetDefaultAngle()
	{
		return vtkQuadRotationalExtrusionFilter_GetDefaultAngle_08(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkQuadRotationalExtrusionFilter_GetDeltaRadius_09(HandleRef pThis);

	/// <summary>
	/// Set/Get change in radius during sweep process.
	/// </summary>
	public virtual double GetDeltaRadius()
	{
		return vtkQuadRotationalExtrusionFilter_GetDeltaRadius_09(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkQuadRotationalExtrusionFilter_GetNumberOfGenerationsFromBase_10(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override long GetNumberOfGenerationsFromBase(string type)
	{
		return vtkQuadRotationalExtrusionFilter_GetNumberOfGenerationsFromBase_10(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkQuadRotationalExtrusionFilter_GetNumberOfGenerationsFromBaseType_11(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static long GetNumberOfGenerationsFromBaseType(string type)
	{
		return vtkQuadRotationalExtrusionFilter_GetNumberOfGenerationsFromBaseType_11(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetResolution_12(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolution()
	{
		return vtkQuadRotationalExtrusionFilter_GetResolution_12(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetResolutionMaxValue_13(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolutionMaxValue()
	{
		return vtkQuadRotationalExtrusionFilter_GetResolutionMaxValue_13(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_GetResolutionMinValue_14(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolutionMinValue()
	{
		return vtkQuadRotationalExtrusionFilter_GetResolutionMinValue_14(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkQuadRotationalExtrusionFilter_GetTranslation_15(HandleRef pThis);

	/// <summary>
	/// Set/Get total amount of translation along the z-axis.
	/// </summary>
	public virtual double GetTranslation()
	{
		return vtkQuadRotationalExtrusionFilter_GetTranslation_15(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_IsA_16(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override int IsA(string type)
	{
		return vtkQuadRotationalExtrusionFilter_IsA_16(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkQuadRotationalExtrusionFilter_IsTypeOf_17(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static int IsTypeOf(string type)
	{
		return vtkQuadRotationalExtrusionFilter_IsTypeOf_17(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkQuadRotationalExtrusionFilter_NewInstance_19(HandleRef pThis, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new vtkQuadRotationalExtrusionFilter NewInstance()
	{
		vtkQuadRotationalExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkQuadRotationalExtrusionFilter_NewInstance_19(GetCppThis(), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkQuadRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_RemoveAllPerBlockAngles_20(HandleRef pThis);

	/// <summary>
	/// Set/Get angles of rotation for each block in a composite data set.
	/// </summary>
	public void RemoveAllPerBlockAngles()
	{
		vtkQuadRotationalExtrusionFilter_RemoveAllPerBlockAngles_20(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkQuadRotationalExtrusionFilter_SafeDownCast_21(HandleRef o, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static vtkQuadRotationalExtrusionFilter SafeDownCast(vtkObjectBase o)
	{
		vtkQuadRotationalExtrusionFilter vtkQuadRotationalExtrusionFilter2 = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkQuadRotationalExtrusionFilter_SafeDownCast_21(o?.GetCppThis() ?? default(HandleRef), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			vtkQuadRotationalExtrusionFilter2 = (vtkQuadRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var found);
			if (found)
			{
				vtkQuadRotationalExtrusionFilter2.Register(null);
			}
		}
		return vtkQuadRotationalExtrusionFilter2;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetAxis_22(HandleRef pThis, int _arg);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public virtual void SetAxis(int _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetAxis_22(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetAxisToX_23(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public void SetAxisToX()
	{
		vtkQuadRotationalExtrusionFilter_SetAxisToX_23(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetAxisToY_24(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public void SetAxisToY()
	{
		vtkQuadRotationalExtrusionFilter_SetAxisToY_24(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetAxisToZ_25(HandleRef pThis);

	/// <summary>
	/// Set the axis of rotation to use. It is set by default to Z.
	/// </summary>
	public void SetAxisToZ()
	{
		vtkQuadRotationalExtrusionFilter_SetAxisToZ_25(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetCapping_26(HandleRef pThis, int _arg);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void SetCapping(int _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetCapping_26(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetDefaultAngle_27(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get angle of rotation.
	/// </summary>
	public virtual void SetDefaultAngle(double _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetDefaultAngle_27(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetDeltaRadius_28(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get change in radius during sweep process.
	/// </summary>
	public virtual void SetDeltaRadius(double _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetDeltaRadius_28(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetResolution_29(HandleRef pThis, int _arg);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual void SetResolution(int _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetResolution_29(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkQuadRotationalExtrusionFilter_SetTranslation_30(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get total amount of translation along the z-axis.
	/// </summary>
	public virtual void SetTranslation(double _arg)
	{
		vtkQuadRotationalExtrusionFilter_SetTranslation_30(GetCppThis(), _arg);
	}
}
